home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ham Radio
/
Ham Radio CD-ROM (Emerald Software) (1995).ISO
/
ant
/
antenna2
/
woodaf.bas
< prev
next >
Wrap
BASIC Source File
|
1986-09-08
|
5KB
|
160 lines
10 CLS:KEY OFF
20 PRINT" WOODWARD-LAWSON ARRAY SYNTHESIS"
30 REM WOODWARD-LAWSON SAMPLING METHOD
40 REM ARRAY SYNTHESIS
50 REM 7/14/86
60 REM AHMAD FAIZAL MOHD ZAIN
70 '
80 PI=3.141596
90 INPUT"NUMBER OF ELEMENTS ";NE
100 INPUT"SPACING BETWEEN ELEMENTS ";D
110 NMAX=NE*D
120 NM=NMAX*2+1
130 DIM W(200),A(200),F(181),I(200),Z(200),ANG(200)
140 DIM Y(200),PHI(200)
150 CLS:PRINT"Sample point"," w(n)","angle(n)","desired"
160 I=0
170 FOR N=-NMAX TO NMAX
180 I=I+1
190 W(I)=N/(NE*D)
200 X=W(I)
210 IF X*X=1 AND X>0 THEN ANG(I)=0:GOTO 240
220 IF X*X=1 AND X<0 THEN ANG(I)=-180:GOTO 240
230 ACOS=1.570796-ATN(X/SQR(1-X*X)):ANG(I)=180*ACOS/PI
240 PRINT USING "### ##.## ####.## ";-N,W(I),ANG(I),:INPUT A(I)
250 NEXT N
260 GOSUB 1030
270 CLS:GOSUB 1490
280 '
290 FOR THETA=0 TO 180
300 W=COS(THETA*PI/180)
310 F(THETA)=0
320 I=0
330 FOR N=-NMAX TO NMAX
340 I=I+1
350 A=SIN((NE/2)*(W-W(I))*(2*PI)*D)
360 B=NE*SIN(.5*(W-W(I))*(2*PI)*D)
370 IF A=0 AND B=0 THEN F(THETA)=F(THETA)+A(I):GOTO 390
380 F(THETA)=F(THETA)+A(I)*A/B
390 NEXT N
400 Y(THETA)=F(THETA)
410 IF F(THETA)>YMAX THEN YMAX=F(THETA)
420 IF F(THETA)<YMIN THEN YMIN=F(THETA)
430 NEXT THETA
440 '
450 GOSUB 1100
460 GOSUB 1190
470 GOSUB 1480
480 '
490 ' calculate current
500 CLS
510 PRINT"element number element position excitation current PHASE SHIFT"
520 '
530 I=0
540 YMAX=0:YMIN=0
550 PMAX=0:PMIN=0
560 EVEN=0
570 IF NE MOD 2=0 THEN EVEN=1
580 IF EVEN=1 THEN NN=NE/2 ELSE NN=(NE-1)/2
590 FOR M=-NN TO -1
600 I=I+1
610 CR=0:CI=0:J=0
620 IF EVEN<>1 THEN Z(I)=M*D ELSE Z(I)=(2*M+1)*D/2
630 GOSUB 780
640 GOSUB 850
650 NEXT M
660 M=0:CR=0:CI=0:I=0
670 IF EVEN=0 THEN Z(M)=M*D ELSE 700
680 GOSUB 780:GOSUB 850
690 I=0
700 FOR M=1 TO NN
710 I=I+1
720 CR=0:CI=0:J=0
730 IF EVEN<>1 THEN Z(I)=M*D ELSE Z(I)=(2*I-1)*D/2
740 GOSUB 780
750 GOSUB 850
760 NEXT M
770 GOSUB 1510
780 FOR N=-NMAX TO NMAX
790 A=2*PI*Z(I)*W(J)
800 CR=CR+A(J)*COS(A)
810 CI=CI+A(J)*SIN(A)
820 J=J+1
830 NEXT N
840 RETURN
850 CR=CR/NE:CI=CI/NE
860 IF CR>0 THEN PHI(I)=(180/PI)*ATN(CI/CR):GOTO 910
870 IF CR<0 THEN PHI(I)=180*SGN(CI)+(180/PI)*ATN(CI/CR):GOTO 910
880 IF CR=0 THEN PHI(I)=90*SGN(CI):GOTO 910
890 IF CI=0 AND CR<0 THEN PHI(I)=180:GOTO 910
900 PHI=ATN(CI/CR):PHI(I)=PHI*180/PI
910 IF PHI(I)=-180 THEN PHI(I)=180
920 IF PHI(I)=-0 THEN PHI(I)=0
930 I(I)=SQR(CR*CR+CI*CI)
940 IF PHI(I)>PMAX THEN PMAX=PHI(I)
950 IF PHI(I)<PMIN THEN PMIN=PHI(I)
960 PRINT USING " ### ##.## ###.##### ####.## ";M;Z(I);I(I),PHI(I)
970 RETURN
980 INPUT"DO YOU WANT TO MAKE ANY CHANGES";AN$
990 IF AN$="N" OR AN$="n" THEN RETURN
1000 INPUT"TYPE SAMPLING POINT TO CHANGE ";Q
1010 PRINT USING "### ##.## ####.## ##.## ";Q,W(Q),ANG(Q),A(Q),:INPUT A(Q)
1020 '
1030 CLS:PRINT"sample no w(n) angle desired sample"
1040 I=0:FOR N=-NMAX TO NMAX :I=I+1
1050 PRINT USING "### ##.## ####.## ##.## ";I,W(I),ANG(I),A(I)
1060 NEXT N
1070 PRINT
1080 GOSUB 980
1090 RETURN
1100 ' MAY 29, 1986
1110 ' RECTANGULAR PLOT OF DATA
1120 SCREEN 2:CLS
1130 FOR K=7 TO 67 STEP 10:LOCATE 20,K:PRINT"+";:NEXT K
1150 VIEW (52,28)-(530,154),,1
1160 LINE (239,0)-(239,154)
1170 RETURN
1180 '
1190 PSET (0,Y(0))
1200 WINDOW (0,YMIN)-(180,YMAX)
1202 LINE (0,0)-(180,0),,,&HF0F0
1204 PRESET (0,1)
1206 LINE (0,1)-(180,1),,,&HF0F0
1208 PRESET (0,Y(0))
1210 FOR X=0 TO 180
1220 LINE -(X,Y(X))
1230 NEXT X
1240 LOCATE 3,20:PRINT"MAGNITUDE OF SYNTHESISED PATTERN"
1260 LOCATE 21,6:PRINT"180":LOCATE 21,37:PRINT"90":LOCATE 21,67:PRINT"0"
1270 RETURN
1280 '
1290 ' MAY 29, 1986
1300 ' RECTANGULAR PLOT OF DATA
1310 LOCATE 3,20:PRINT"MAGNITUDE OF CURRENT DISTRIBUTION"
1320 '
1330 WINDOW (1,YMIN)-(I,YMAX)
1340 '
1350 PSET (1,Y(1))
1360 FOR X=1 TO I
1370 LINE -(X,Y(X))
1380 NEXT X
1390 LOCATE 21,6:PRINT-L/2:LOCATE 21,37:PRINT"0":LOCATE 21,66:PRINT L/2
1400 RETURN
1410 '
1420 WINDOW (1,PMIN)-(I,PMAX)
1430 PSET (1,PHI(1))
1440 FOR X=1 TO I
1450 LINE -(X,PHI(X))
1460 NEXT X
1470 RETURN
1480 LOCATE 24,1:PRINT"TYPE <RETURN> TO CONTINUE...";:INPUT W:SCREEN 0,0
1490 PRINT"I'M DOING SOME CALCULATION. PLEASE WAIT..."
1500 RETURN
1510 T$="DO YOU WANT TO RUN THIS PROGRAM AGAIN (Y/N)? ":LC=23:GOSUB 1570
1520 AN$=INKEY$
1530 IF AN$="Y" OR AN$="y" THEN RUN
1540 IF AN$="N" OR AN$="n" THEN END
1550 GOTO 1510
1560 :
1570 LOCATE LC,(80-LEN(T$))/2+1:PRINT T$:RETURN 'SUBROUTINE TO CENTRE TEXT